home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / pascala.zip / COMPSORT.PAS < prev    next >
Pascal/Delphi Source File  |  1991-05-06  |  5KB  |  190 lines

  1. (*****************************************)
  2. (*  Alejo Alamillo                *)
  3. (*  COSC 055                 *)
  4. (*  SPRING 1991                 *)
  5. (*                     *)
  6. (*****************************************)
  7.  
  8. (*******************************************************)
  9. (*  Compsorts is a program which uses several          *)
  10. (*  sorting methods and compares their execution times *)
  11. (*  The main program and Shellsort are to be completed *)
  12. (*        PRB  10/23/90                                *)
  13. (*******************************************************)
  14. PROGRAM Compsorts(Input,Output,File1);
  15.  
  16. CONST MaxSize = 8192;
  17. TYPE  ArrayType = ARRAY[0..MaxSize] OF Integer;
  18. VAR B,C,D,E,F,G: ArrayType;
  19.     StartTime, EndTime, Size: Integer;
  20.     File1: Text;
  21. (**************************************************)
  22. (*  Bubble Sort                                   *)
  23. (**************************************************)
  24.   PROCEDURE BubbleSort(VAR A: ArrayType; Size: Integer);
  25.   VAR I, Pass, Temp: Integer;
  26.       NoExchg:  Boolean;
  27.  
  28.   BEGIN
  29.   Pass:= 0;
  30.   REPEAT
  31.     NoExchg:= True;
  32.     Pass:= Pass + 1;
  33.     FOR I:= 1 TO Size - Pass DO
  34.       IF A[I] < A[I+1] THEN
  35.         BEGIN
  36.         Temp:= A[I];
  37.         A[I]:= A[I+1];
  38.         A[I+1]:= Temp;
  39.         NoExchg:= False;
  40.         END;
  41.   UNTIL Noexchg OR (Pass = Size-1);
  42.   END;
  43. (***********************************************************)
  44. (*  Selection sort--find the smallest element and place it *)
  45. (***********************************************************)
  46. PROCEDURE SelectSort(VAR A: ArrayType; Size: Integer);
  47.  
  48.   VAR Pass, I, J, K, S: Integer;
  49.  
  50.   BEGIN
  51.   FOR Pass:= 1 TO Size DO
  52.     BEGIN
  53.     K:= Pass;  (* Points to location of smallest remaining entry *)
  54.     S:= A[K];
  55.     FOR I:= Pass + 1 TO Size DO   (* Find smallest      "       "   *)
  56.       IF A[I] < S THEN
  57.         BEGIN
  58.         S:= A[I];
  59.         K:= I;
  60.         END;
  61.     A[K]:= A[Pass];
  62.     A[Pass]:= S;      (* Switch *)
  63.     END;  (* Pass *)
  64.   END;
  65. (***********************************************************)
  66. (*  Insertion Sort  (Refined)                              *)
  67. (*  Assumes a 'stopper--impossibly small' at entry zero    *)
  68. (***********************************************************)
  69.   PROCEDURE InsertSort(VAR A: ArrayType; Size: Integer);
  70.     VAR  Pass, I, S:  Integer;
  71.     BEGIN
  72.     FOR Pass:= 2 TO Size DO  (* Insert item 'Pass' *)
  73.       BEGIN
  74.       I:= Pass;
  75.       S:= A[Pass];   (* Copy item to be inserted *)
  76.       WHILE S < A[I-1] DO
  77.         BEGIN
  78.         A[I]:= A[I-1]; (* Move item down in list *)
  79.         I:= I-1;
  80.         END;
  81.       A[I]:= S;  (* Perform Insertion *)
  82.       END;
  83.     END;
  84.  
  85. (*********************************************************)
  86. (*  ShellSort                                            *)
  87. (*********************************************************)
  88. PROCEDURE ShellSort(VAR A: ArrayType; Size:Integer);
  89.   VAR
  90.     I,J,K,S,N:INTEGER;
  91.   BEGIN
  92.     N := SIZE;
  93.     I := N DIV 2;
  94.     WHILE I > 0 DO
  95.       BEGIN
  96.       J := I;
  97.       REPEAT
  98.         J := J + 1;
  99.         K := J - 1;
  100.         WHILE K > 0 DO
  101.           BEGIN
  102.           IF A[K] > A[K+I] THEN
  103.             BEGIN
  104.             S := A[K];
  105.             A[K] := A[K+I];
  106.             A[K+I] := S;
  107.             K := K - I;
  108.             END
  109.           ELSE
  110.             K := 0
  111.         END
  112.       UNTIL J = N;
  113.       I := I DIV 2
  114.       END
  115.   END; (* SHELL SORT *)
  116.  
  117. (*********************************************************)
  118. (*  QuickSort-- Recursive version                        *)
  119. (*********************************************************)
  120.   PROCEDURE QuickSort(VAR A: ArrayType; Size:Integer);
  121.  
  122.     PROCEDURE Sort(L,R: Integer);
  123.       VAR Temp, I, J, StartValue: Integer;
  124.       BEGIN
  125.       I:= L;
  126.       J:= R;
  127.       StartValue:= A[(L+R) DIV 2];
  128.       REPEAT
  129.         WHILE A[I] < StartValue DO  (* Search from left *)
  130.           I:= I+1;
  131.         WHILE A[J] > StartValue DO (* Search from right *)
  132.           J:= J-1;
  133.         IF I<=J THEN
  134.           BEGIN
  135.           Temp:= A[I];
  136.           A[I]:= A[J];
  137.           A[J]:= Temp;
  138.           I:= I+1;
  139.           J:= J-1;
  140.           END;
  141.       UNTIL  I >= J;
  142.       IF L < J THEN Sort(L,J);
  143.       IF I < R THEN Sort(I,R);
  144.     END;  (* Sort *)
  145.   BEGIN
  146.   Sort(1, Size);
  147.   END;
  148.  
  149.  
  150. BEGIN   (*******************  MAIN  ***********************)
  151. Reset(File1);
  152. B[0]:= 0;    (* Bumper for top of list *)
  153. Size:= 0;
  154. WHILE not Eof(File1) DO
  155.   BEGIN
  156.   Size:= Size + 1;
  157.   Readln(File1,B[Size]);
  158.   END;
  159. C:= B; D:= B; E:= B; F:= B; G :=B;
  160.  
  161. Writeln('Array Size: ',Size:0);
  162. Writeln;
  163.  
  164. StartTime:= Clock;
  165. BubbleSort(B, Size);
  166. EndTime:= Clock;
  167. Writeln('BubbleTime: ',EndTime-StartTime:0);
  168.  
  169. StartTime:= Clock;
  170. SelectSort(C,Size);
  171. EndTime:= Clock;
  172. Writeln('SelectTime: ',EndTime-StartTime:0);
  173.  
  174. StartTime:= Clock;
  175. InsertSort(D, Size);
  176. EndTime:= Clock;
  177. Writeln('InsertTime: ',EndTime-StartTime:0);
  178.  
  179. StartTime:=Clock;
  180. ShellSort(F,Size);
  181. EndTime:=Clock;
  182. Writeln('ShellTime:  ',EndTime-StartTime:0);
  183.  
  184. StartTime:= Clock;
  185. QuickSort(G, Size);
  186. EndTime:= Clock;
  187. Writeln('QuickTime:  ',EndTime-StartTime:0);
  188.  
  189. END.     (****************  COMPSORTS  **********************)
  190.